编译linux内核常见报错(最全)总结讲解

您所在的位置:网站首页 linux drivers目录为什么那么多行 编译linux内核常见报错(最全)总结讲解

编译linux内核常见报错(最全)总结讲解

2024-05-26 00:23| 来源: 网络整理| 查看: 265

目录 一、简介二、常见报错三、其他相关链接

一、简介

本文主要介绍在编译内核中常见的报错问题的处理方法,编译过程中的主要报错有缺少本地依赖库、config设置、gcc版本与内核版本不匹配、内核源文件版本问题等,具体问题请看第二章。

二、常见报错 1、CC arch/arm/kernel/asm-offsets.s cc1: error: invalid option `abi=aapcs-linux' make[1]: *** [arch/arm/kernel/asm-offsets.s] Error 1 make: *** [prepare0] Error 2 //解决方法:上述的关掉EABI选项可以通过测试(Kernel Features->Use EABI) 2、drivers/video/console/vgacon.o:987:warning:comparison is always true due to limited range of data type make[3]:***[drivers/video/console/vgacon.o] error 1 make[2]:***[drivers/video/console2] error 2 make[1]:***[drivers/video1] error 2 make:***[drivers] error 2 //解决方法:在make menuconfig 时Device Drivers → Graphics support → Console display driver support →VGA text console(不选这个) 3、出现/usr/local/arm/bin/arm-linux-ld:arch/arm/kernel/vmlinux.lds:782: parse error make:***[.tmp_vmlinux1] Error 1这类错误 //解决方法:修改arch/arm/kernel/vmlinux.lds [arm@localhost linux2.6.14]$vi arch/arm/kernel/vmlinux.lds //将文件尾2条的ASSERT注释掉(1439行) ASSERT((__proc_info_end __ proc_info_begin), "missing CPU support") ASSERT((__arch_info_end __ arch_info_begin), "no machine record defined") //原因:binutils版本太旧 4、 常见依赖包缺失报错,如libssl-dev、openssl-devel、libncurses5-dev、bison、flex,具体如下: 1) make menuconfig /usr/bin/ld: cannot find -lncurses //解决办法:sudo apt-get install libncurses5-dev 2)[root@localhost *内核目录*]# make -j4 HOSTCC scripts/extract-cert scripts/extract-cert.c:21:25: 致命错误:openssl/bio.h:没有那个文件或目录 #include //解决办法:yum install openssl-devel 3)[root@localhost *内核目录*]# make menuconfig UPD scripts/kconfig/.mconf-cfg HOSTCC scripts/kconfig/mconf.o YACC scripts/kconfig/zconf.tab.c /bin/sh: bison: 未找到命令 make[1]: *** [scripts/kconfig/zconf.tab.c] 错误 127 make: *** [menuconfig] 错误 2 //解决办法:[root@localhost *内核目录*]# yum install bison flex 4)compress.c:14:58: fatal error: zlib.h: No such file or directory compilation terminated. //解决办法:sudo apt-get install zlib1g-dev 5)/bin/sh: gmake: not found make[3]: *** [clean] Error 1 //原因:在ubuntu中已经取消掉了gmake,都用make代替。 //解决办法: sudo ln -s /usr/bin/make /usr/bin/gmake 6)“error : openssl/bio.h :No such file or folder //解决方法:sudo apt-get install libssl-dev 7)Makefile:xxx: recipe for target 'xxx' failed make[2]:***[arch/arm/boot/compressed/piggy.lzo] Error 1 make[1]: ***[arch/arm/boot/compressed/vmlinux] Error 2 //解决方法:sudo apt-get install lzo lzop //原因:缺少工具lzo,lzop,LZO是致力于解压速度的一种数据压缩算法 5、在make modules_install时最后几行弹出错误: if [ -r System.map -a -x /sbin/depmod ]; then /sbin/depmod -ae -F System.map 2.6.12.2; fi /bin/sh: line 1: 3357 已杀死 /sbin/depmod -ae -F System.map 2.6 .12.2 make: *** [_modinst_post] 错误 137 //解决方法:make module_install之前你是否关闭了selinux, //原因:该问题是selinux阻止写/lib/modules/ 目录 6、error:unrecognized command line options '-mabi=apcs-gnu' note: valid arguments to '-mabi=' are: ms sysv error: unrecognized command line option '-mlittle-endian' //解决方法:交叉编译工具未指定,加上CROSS_COMPILE=arm-linux- 参数 7、使用内核包编译驱动时常常提示如下: WARNING: Symbol version dump /usr/src/linux-2.6.26/Module.symvers is missing; modules will have no dependencies and modversions. //原因:通常头核心包中是没有Module.symvers这个文件的,要想获取这个文件只能到下载相同版本核心(2.6.26-1-686)的头文件,只有下载的头文件中才有这个Module.symvers。 //解决方法:把Module.symvers 复制到核心包中,然后执行如下步骤:make oldconfig && make prepare && make scripts。 //然后重新编译驱动,将解决这个warning,同时也解决了版本不正确的问题

make 命令默认执行的是 make all,make all 有四个阶段: prepare test compile package make prepare : 只会执行prepare阶段,这个阶段主要是下载编译依赖 make test : 只会执行test阶段,这个阶段主要是做单元测试 make compile : 只会执行compile阶段,这个阶段主要是进行编译 make package : 只会执行packege阶段,这个阶段会把编译产出都copy到output目录中 make install : 只会执行install阶段,这个阶段是把编译产出放到$GOPATH/bin目录下,这个不是必须的 make clean : 只会执行clean阶段,这个阶段把编译输出的一些文件删除,恢复到编译之前的状态

8、fatal error: linux/compiler-gcc7.h: No such file or directory. 提示缺少compiler-gcc7.h这个文件,是由于内核版本较低和我的gcc版本不匹配造成的有三种解决方法: 1.在内核文件夹中include/linux目录下找到compiler-gcc4.h文件,不同内核版本可能不一样,也有可能是compiler-gcc3.h,将它重命名为compiler-gcc7.h。然后重新编译一下就好了。 2.在新的内核源码中拷贝一个compiler-gcc7.h,将它拷贝到内核文件夹include/linux目录下,重新编译即可。 3.重装一个版本低一点的gcc。 9、在进行make oldconfig时出现,code model kernel does not support PIC mode的错误 解决方法如下: 在源码的根目录下的Makefile中的KBUILD_CFLAGS中添加一个编译选项-fno-PIE 三、其他相关链接

1、交叉编译linux内核详细总结

2、gcc交叉编译工具链制作



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3